using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DataManagementTools._ProjectionsandTransformations
{
    /// <summary>
    /// <para>Create Spatial Reference</para>
    /// <para>Creates a spatial reference for use in ModelBuilder.</para>
    /// <para>创建用于模型构建器的空间参考。</para>
    /// </summary>    
    [DisplayName("Create Spatial Reference")]
    public class CreateSpatialReference : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public CreateSpatialReference()
        {

        }
        public override string ToolboxName => "Data Management Tools";

        public override string ToolName => "Create Spatial Reference";

        public override string CallName => "management.CreateSpatialReference";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_spatial_reference, _spatial_reference_template, _xy_domain, _z_domain, _m_domain, _template, _expand_ratio, _out_spatial_reference];

        /// <summary>
        /// <para>Spatial Reference</para>
        /// <para>The name of the spatial reference to be created.</para>
        /// <para>要创建的空间参考的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Spatial Reference")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _spatial_reference { get; set; } = null;


        /// <summary>
        /// <para>Spatial Reference Template</para>
        /// <para>The feature class or layer to be used as a template to set the value for the spatial reference.</para>
        /// <para>要用作模板以设置空间参考值的要素类或图层。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Spatial Reference Template")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _spatial_reference_template { get; set; } = null;


        /// <summary>
        /// <para>XY Domain</para>
        /// <para>The allowable coordinate range for x,y coordinates.</para>
        /// <para>x，y 坐标的允许坐标范围。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("XY Domain")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _xy_domain { get; set; } = null;


        /// <summary>
        /// <para>Z Domain (min max)</para>
        /// <para>The allowable coordinate range for z-values.</para>
        /// <para>z 值的允许坐标范围。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Z Domain (min max)")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _z_domain { get; set; } = null;


        /// <summary>
        /// <para>M Domain (min max)</para>
        /// <para>The allowable coordinate range for m-values.</para>
        /// <para>m 值的允许坐标范围。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("M Domain (min max)")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _m_domain { get; set; } = null;


        /// <summary>
        /// <para>Template XYDomains</para>
        /// <para>The feature classes or layers that can be used to define the XY Domain.</para>
        /// <para>可用于定义 XY 属性域的要素类或图层。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Template XYDomains")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _template { get; set; } = null;


        /// <summary>
        /// <para>Grow XYDomain By Percentage</para>
        /// <para>The percentage by which the XY Domain will be expanded.</para>
        /// <para>XY 域将扩展的百分比。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Grow XYDomain By Percentage")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _expand_ratio { get; set; } = 0;


        /// <summary>
        /// <para>Output Spatial Reference</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Spatial Reference")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_spatial_reference { get; set; }


        public CreateSpatialReference SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}